package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.AcademyEntity;
import com.tfjybj.itoo.teach.model.AcademyModel;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * AcademyService接口
 * academy表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface AcademyService extends BaseServicePlus<AcademyEntity> {

    //region 模板生成：模糊查询

    /**
     * 根据教学部门名称模糊查询academy
     *
     * @param name     机构名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的academy
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<AcademyEntity> queryByLikeName(String name, Integer pageNo, Integer pageSize);
    //endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据学院或者机构id查询学院或者机构名称
     *
     * @param ids 学院或者机构id
     * @return 查询的学院或者机构名称
     * @author 杨燕梅
     * @since 2.0.0 2018-11-17 15:52:59
     */
    List<AcademyModel> queryInfoByAcadIdOrInstId(List<String> ids);

    /**
     * 查询所有学院或者机构名称
     *
     * @return 所有的学院或者机构名称
     * @author 杨燕梅
     * @since 2.0.0 2018-11-17 21:27:01
     */
    List<AcademyModel> queryAcadOrInstInfo();

    /**
     * 查询所有教学部门
     *
     * @return Academy
     * @author 杨燕梅
     * @since 2.0.0 2018-11-23 11:52:12
     */
    List<AcademyModel> queryAllAcademy();

    /**
     * 查询所有教学部门（带分页）
     * @param pageNo
     * @param pageSize
     * @return 所有教学部门
     * @author 杨燕梅
     * @since 2.0.0 2018-12-19 15:17:30
     */
    PageInfo<AcademyModel> queryAllAcademyPageInfo(Integer pageNo, Integer pageSize);

    /**
     * 根据教学部门名称或教学部门简称模糊查询academy(带分页)
     *
     * @param searchContent     教学部门名称
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的academy
     * @author 杨燕梅
     * @since 2.0.0 2018-12-6 21:24:36
     */
    PageInfo<AcademyModel> queryByLikeNameOrAbbreviation(String searchContent, Integer pageNo, Integer pageSize);

    /**
     * 根据教学部门ID查询教学部门详情
     *
     * @param idList 教学部门ID
     * @return 教学部门实体集合
     * @author 杨燕梅
     * @since 2.0.0 2018-12-11 10:14:26
     */
    List<AcademyModel> queryAcademyById(List<String> idList);

    /**
     * 根据ID导出教学部门信息
     *
     * @param response 响应
     * @param idList   教学部门ID
     * @return 导出结果信息
     * @author 杨燕梅
     * @since 2.0.0 2018-12-11 09:45:16
     */
    ItooResult exportByAcademyId(HttpServletResponse response, List<String> idList);

    /**
     * 根据条件导出教学部门
     *
     * @param response     响应
     * @param searchContent    教学部门名称/教学部门简称
     * @return 导出结果信息
     * @author 杨燕梅
     * @since 2.0.0 2018-12-13 08:11:09
     */
    ItooResult exportByStrLike(HttpServletResponse response, String searchContent);

    /**
     * 下载教学部门模板，批量导入使用
     *
     * @param response 响应
     * @return 下载模板是否成功
     * @author 杨燕梅
     * @since 2.0.0 2018-11-29 16:34:12
     */
    boolean downLoadTemplate(HttpServletResponse response);

    /**
     * 批量导入教学部门
     * @param multipartFile
     * @param request
     * @param response
     * @return
     * @author 杨燕梅
     * @since 2.0.0 2018-11-29 16:34:30
     */
    ItooResult importTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response);

    /**
     * 根据errorListId导出未成功导入的信息
     *
     * @param response    响应
     * @param errorListId 为成功导入的分组id
     * @return 导出结果
     * @author 杨燕梅
     * @since 1.0.0 2018-12-1 19:39:17
     */
    boolean exportErrorList(String errorListId, HttpServletResponse response);

    /**
     * 根据教学部门名称查询教学部门Id
     *
     * @param name 教学部门简称
     * @return 模糊查询的academy
     * @author 杨燕梅
     * @since 2.0.0 2018-12-2 18:55:11
     */
    String queryAcademyIdByName(String name);

    /**
     * 根据教学部门代码和教学部门名称查询教学部门是否已存在
     *
     * @param code   教学部门代码
     * @param name   教学部门名称
     * @return 教学部门信息
     * @author 杨燕梅
     * @since 2.0.0 2018-11-29 19:37:30
     */
    List<AcademyEntity> queryByCodeAndNameExist(String code, String name);

    /**
     * 将数据保存到权限中去
     *
     * @param academyEntity
     * @author 李建帅
     * @since 2.0.0 2018-12-9 19:18:10
     */
    void saveToAuth(AcademyEntity academyEntity);

    /**
     * 无参查询Academy表所有学院信息
     *
     * @author 智雪艳
     * @since 2.0.0 2019-05-23 14:13:09
     */
    List<AcademyEntity> findAcademy();

    /**
     * 无参查询所有二级学院,去除没有专业的学院,附加专业数
     *
     * @return 二级学院集合
     * @author 智雪艳
     * @since 2.0.0 2019-05-23 14:13:09
     */
    List<AcademyModel> selAcademy();
}
